library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
## ✔ tibble 3.1.7 ✔ dplyr 1.0.9
## ✔ tidyr 1.2.0 ✔ stringr 1.4.0
## ✔ readr 2.1.2 ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(tidytext)
library(tm)
## Loading required package: NLP
##
## Attaching package: 'NLP'
## The following object is masked from 'package:ggplot2':
##
## annotate
library(lubridate)
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
library(zoo)
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
Definimos un tema para facilitar la visualización de nuestros resultados.
tema_graf <-
theme_minimal() +
theme(text = element_text(family = "serif"),
panel.grid.minor = element_blank(),
strip.background = element_rect(fill = "#EBEBEB", colour = NA),
legend.position = "none", legend.box.background = element_rect(fill = "#EBEBEB", colour = NA))
Cantidad de twits de Esther Sanches en la primer semana
print(nrow(tweets))
## [1] 69
Es claro que Esther Sanchez no era usuaria habitual de twitter. 27 tweets de campaña reflejan que la cuenta ha sido abierta solamente para este evento y no tiene gran aporte sobre las propuestas.
Dada la regularidad temporal de los mensajes es probable que se trate de un “bot” al que se le ha suministrado por parte del equipo de campaña un texto consensuado con la candidata y se estén tomando palabras y frases breves aparecen junto a las fotografías que la muestran recorriendo la universidad.
Casi no dice nada. Expresa por fotos y logotipos lo que es.
Reconocimiento en las redes sociales
Cargamos el diccionario de connotación de palabras generados con la escala +5 -5 utilizados en Mendoza por una población de entre 20 y 50 años.
afinn <- read.csv("lexico_afinn.en.es.csv", stringsAsFactors = F, fileEncoding = "latin1") %>% tibble::as_tibble()
Factor de imagen traducido al inglés (sentimiento positivo o negativo de los términos usados por los colaboradores)
afinn[ , c(1,2)]
## # A tibble: 2,476 × 2
## Palabra Puntuacion
## <chr> <int>
## 1 a bordo 1
## 2 abandona -2
## 3 abandonado -2
## 4 abandonar -2
## 5 abatido -2
## 6 abatido -3
## 7 aborrece -3
## 8 aborrecer -3
## 9 aborrecible -3
## 10 aborrecido -3
## # … with 2,466 more rows
En esta métrica utilizamos el diccionario cargado y analizamos los mensajes (tweets y retweets) de los candidatos, colaboradores y replicadores. Se puede ver la actividad durante la semana y cuales son las palabras más significativas que han quedado en esta audiencia “limitada”
** No prestar atención a los códigos de programación** . Se han dejado aquí solamente para guiar al autor en el proceso de análisis de la segunda semana.
tuits2 <-
tweets %>%
separate(created_at, into = c("Fecha", "Hora"), sep = " ") %>%
separate(Fecha, into = c("Dia", "Mes", "Periodo"), sep = "-", remove = FALSE
)
tuits2$text <- tolower( tuits2$text)
tuits_afinn <-
tuits2 %>%
unnest_tokens(input = "text", output = "Palabra") %>%
inner_join(afinn, ., by = "Palabra") %>%
mutate(Tipo = ifelse(Puntuacion > 0, "Positiva", "Negativa")) %>%
rename("Candidato" = screen_name)
temp <- group_by(tuits_afinn,status_id)
temp2 <- summarise(temp,Puntuacion_tuit=mean(temp$Puntuacion))
temp3 <- left_join(temp2,tweets,by ="status_id")
tuits2 <- temp3
map(c("Positiva", "Negativa"), function(sentimiento) {
tuits_afinn %>%
filter(Tipo == sentimiento) %>%
group_by(Candidato) %>%
count(Palabra, sort = T) %>%
top_n(n = 10, wt = n) %>%
ggplot() +
aes(Palabra, n, fill = Candidato) +
geom_col() +
facet_wrap("Candidato", scales = "free") +
scale_y_continuous(expand = c(0, 0)) +
coord_flip() +
labs(title = sentimiento) +
tema_graf
})
## [[1]]
##
## [[2]]
# Similitudes
En este caso la estrategia ha sido utilizar a los contactos con mayor reputación y seguidores para replicar el mensaje EstherUNCUYO mediante reenvios indirectos de los contactos más secanos de campaña con el fin de llegar a capturar la cifra necesaria para superar lo que se conoce como “El valle de la muerte”. Para esta elección tan particular este umbral se encuentra en el 13% de la población (masa votante). Si se supera este porcentaje es probable que la red opere a favor del candidato y se logre superar al menos el 50% del total de votos.
Si calculamos el sentimiento de los candidatos y replicadores del mensaje, haciendo una suma de puntuaciones, aquellos con más palabras podrían tener puntuaciones más altas, lo cual sesgaría nuestra interpretación de la magnitud de los resultados. En un caso como este, nos conviene pensar en una medida resumen como la media para hacer una mejor interpretación de nuestros datos.
Quitamos “no” diccionario de artículos, preposiciones, etc. de palabras. Es una apalabra para eliminar. Esta palabra muy común en español que no necesariamente implica un sentimiento negativo. Es la palabra negativa más frecuente entre los colaboradores que se ve en el primer gráfico, por lo que podría sesgar nuestros resultados. En el análisis principal del grupo interclaustro se ha detectado que el término PROBLEMA es el factor de sentimineto más negativo que los votantes señalan como procupante.
tuits_afinn <-
tuits_afinn %>%
filter(Palabra != "no")
Esta métrica no arroja información visible por la muy baja tasa de lectura del electorado. A pesar de los esfuerzos la gente no está leyendo los mensajes en tweet ni en el resto de las redes con intensidad suficiente como para transformarlo en una topic trend.
Como deseamos observar tendencias, vamos a obtener la media de sentimientos por día, usando group_by() y summarise() y asignamos los resultados a tuits_afinn_fecha
tuits_afinn_fecha <-
tuits_afinn %>%
group_by(status_id) %>%
mutate(Suma = mean(Puntuacion)) %>%
group_by(Candidato, Fecha) %>%
summarise(Media = mean(Puntuacion))
## `summarise()` has grouped output by 'Candidato'. You can override using the
## `.groups` argument.
Veamos nuestros resultados con ggplot()
tuits_afinn_fecha %>%
ggplot() +
aes(Fecha, Media, color = Candidato) +
geom_line() +
tema_graf +
theme(legend.position = "top")
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
Ningúna palabra de los Candidatos (colaboradores) o de sus replicadores
supera el promedio por lo que se puede asegurar que no hay directiva
partidaria respecto al discurso.
No nos dice mucho. Sin embargo, si separamos las líneas por candidato, usando facet_wrap(), será más fácil observar el las tendencias de los Candidatos.
tuits_afinn_fecha %>%
ggplot() +
aes(Fecha, Media, color = Candidato) +
geom_hline(yintercept = 0, alpha = .35) +
geom_line() +
facet_grid(Candidato~.) +
tema_graf +
theme(legend.position = "none")
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
## geom_path: Each group consists of only one observation. Do you need to adjust
## the group aesthetic?
Lo mismo ocurre con las 9200 palabras que candidaos, colaboradores y
replicadores han tipeado en la primer semana.
Se dice que estos son mensajes “vacios” sólo para llamar la atención de votntes en la red.
Esta métrica no alcanza a levantar las agujas de los medidores por los mismos motivos que la anterior.
Una manera en que podemos extraer tendencias es usar el algoritmo de regresión local LOESS. Con este algoritmo trazaremos una línea que intenta ajustarse a los datos contiguos. Como sólo tenemos una observación por día, quitaremos el sombreado que indica el error estándar.
Una explicación más completa de LOESS se encuentra aquí:
https://www.itl.nist.gov/div898/handbook/pmd/section1/pmd144.htm Usamos la función geom_smooth() de ggplot2, con el argumento method = “loess” para calcular y graficar una regresión local a partir de las medias por día.
tuits_afinn_fecha %>%
ggplot() +
aes(Fecha, Media, color = Candidato) +
geom_smooth(method = "loess", fill = NA) +
tema_graf
## `geom_smooth()` using formula 'y ~ x'
LOESS tampoco lobra inetificar tendencias en la primer semana. ¿No hay proyecto?, ¿Cuál es el plan?, ¿Qúe se va a hacer? ¿Cómo se hará?
En realidad, podemos obtener líneas muy similares directamente de las puntuaciones.
tuits_afinn %>%
ggplot() +
aes(Fecha, Puntuacion, color = Candidato) +
geom_smooth(method = "loess", fill = NA) +
tema_graf
## `geom_smooth()` using formula 'y ~ x'
Lo anterior ilustra la manera en que el algoritmo LOESS llega a sus resultados. También es manera de observar que este algoritmo no nos permite obtener una formula de regresión, de la misma manera que lo haríamos
Si separamos las lineas por candidato y mostramos los puntos a partir de los cuales se obtienen las líneas de regresión, podemos observar con más claridad la manera en que el algoritmo LOESS llega a sus resultado. Haremos esto con facet_wrap() y geom_point.
tuits_afinn %>%
ggplot() +
aes(Fecha, Puntuacion, color = Candidato) +
geom_point(color = "#FF1515") +
geom_smooth(method = "loess", fill = NA) +
facet_wrap(~Candidato) +
tema_graf
## `geom_smooth()` using formula 'y ~ x'
Esto es conveniente, pues podemos identificar tendencias de datos que en apariencia no tienen ninguna. Al mismo tiempo, esto es una desventaja, pues podemos llegar a sobre ajustar la línea de regresión y, al interpretarla, llegar a conclusiones que no siempre son precisas.
Comparemos los resultados de al algoritmo LOESS con los resultados de una Regresión Lineal ordinaria, que intentará ajustar una recta.
tuits_afinn_fecha %>%
ggplot() +
aes(Fecha, Media, color = Candidato) +
geom_point(color = "#FF1515") +
geom_smooth(method = "lm", fill = NA) +
facet_wrap(~Candidato) +
tema_graf
## `geom_smooth()` using formula 'y ~ x'
En este punto es interesante revisar (seguir) la opinión de candidato
como ** Gabriela Balls** que en los primeros días (martes) de la primer
semana esboza términos de iamgen negativa. Esto puede implicar que se
trata de una discidente o que realmente tiene capacidad de crítica sobre
las propuestas que se hacen por parte de la lista.
Aun podemos observar una tendencia, pero en la mayoría de los casos no es tan “clara” como parecería usando LOESS. También podemos ver cómo es que pocos datos, es posible que valores extremos cambien notablemente la forma de una línea trazada con LOESS, de manera similar a cómo cambian la pendiente de una Regresión Lineal ordinaria. Para nuestros fines, LOESS es suficiente para darnos un panorama general en cuanto a la tendencia de sentimientos en los candidatos. No obstante, es importante ser cuidadosos con las interpretaciones que hagamos.
La media móvil se obtiene a partir de subconjuntos de datos que se encuentran ordenados. En nuestro ejemplo, tenemos nuestros datos ordenados por fecha, por lo que podemos crear subconjuntos de fechas consecutivas y obtener medias de ellos. En lugar de obtener una media de puntuación de todas las fechas en nuestros datos, obtenemos una media de los días 1 al 3, después de los días 2 al 4, después del 3 al 5, y así sucesivamente hasta llegar al final de nuestras fechas.
Lo que obtendríamos con esto son todos los agregados de tres días consecutivos, que en teoría debería ser menos fluctuantes que de los días individuales, es decir, más estables y probablemente más apropiados para identificar tendencias.
Crearemos medias móviles usando rollmean() de zoo. Con esta función calculamos la media de cada tres días y la graficamos con ggplot.
Este gráfico es interactivo. Deslice el cursos del ratón sobre la imágen para ver con más detalles los datos.
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plot_ly(tuits_afinn_fecha[ ,c(1,3)], x=~Media, y=~Candidato)
## No trace type specified:
## Based on info supplied, a 'bar' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#bar
Si comparamos con la gráfica que obtuvimos a partir de las medias por día, esta es menos “ruidosa” y nos permite observar más fácilmente las tendencias.
Comparando sentimientos positivos y negativos Es posible que no nos interesen las puntuaciones de sentimiento de cada día, sólo si la tendencia ha sido positiva o negativa. Como ya etiquetamos la puntuación de nuestros tuits como “Positiva” y “Negativa”, sólo tenemos que obtener proporciones y graficar.
Primero, veamos que proporción de tuits fueron positivos y negativos, para todo el 2018 y para cada Candidato. Usamos geom_col() de ggplot2 para elegir el tipo de gráfica y la función percent_format() de scales para dar formato de porcentaje al eje y.
tuits_afinn %>%
count(Candidato, Tipo) %>%
group_by(Candidato) %>%
mutate(Proporcion = n / sum(n)) %>%
ggplot() +
aes(Candidato, Proporcion, fill = Tipo) +
geom_col() +
scale_y_continuous(labels = percent_format()) +
tema_graf +
theme(legend.position = "top",axis.text.x = element_text(angle = 90))
Si obtenemos la proporción de positiva y negativa por día, podemos obsrvar cómo cambia con el paso del tiempo. Usamos el argumento width = 1 de geom_col() para quitar el espacio entre barras individuales y el argumento expand = c(0, 0) de scale_x_date() para quitar el espacio en blanco en los extremos del eje x de nuestra gráfica (intenta crear esta gráfica sin este argumento para ver la diferencia).
Esta métrica es interactiva. Deslice el cursos del ratón para ver los datos numéricos.
library(plotly)
data <- tuits_afinn[,c('favorite_count', 'Candidato')]
data <- summarise(data,Candidato,favorite_count)
fig <- plot_ly(data, labels = ~Candidato, values = ~favorite_count, type = 'pie')
fig <- fig %>% layout(title = 'Proporción de replicación',
xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))
fig
En este ejemplo, como los candidatos no tuitearon todos los días, tenemos algunos huecos en nuestra gráfica. De todos modos es posible observar la tendencia general de la mayoría de ellos.
Una manera más en la que podemos visualizar la puntuación sentimientos es usando boxplots. En nuestro análisis quizás no es la manera ideal de presentar los resultados dado que tenemos una cantidad relativamente baja de casos por Candidato. Sin embargo, vale la pena echar un vistazo, pues es una herramienta muy útil cuando tenemos una cantidad considerable de casos por analizar.
En este tipo de gráficos, la caja representa el 50% de los datos, su base se ubica en el primer cuartil (25% de los datos debajo) y su tope en el tercer cuartil (75% de los datos debajo). La línea dentro de la caja representa la mediana o secundo cuartil (50% de los datos debajo). Los bigotes se extienden hasta abarcar un largo de 1.5 veces el alto de la caja, o hasta abarcar todos los datos, lo que ocurra primero. Los puntos son los outliers, datos extremos que salen del rango de los bigotes. Por todo lo anterior, esta visualización es preferible cuando tenemos datos con distribuciones similares a una normal.
Usamos la función geom_boxplot() de ggplot2 para elegir el tipo de gráfica. Creamos un boxplot por candidato.
tuits2 %>% ggplot() +
aes(screen_name, retweet_count, fill = screen_name) +
geom_boxplot() +
theme(legend.position = "none",axis.text.x = element_text(angle = 90))
También podemos crear boxplots para ver cambios a través del tiempo, sólo tenemos que agrupar nuestros datos. Como nuestros datos ya tienen una columna para el mes del año, usaremos esa como variable de agrupación. Nota que usamos factor() dentro de mutate() para cambiar el tipo de dato de Mes, en R los boxplots necesitan una variable discreta en el eje x para mostrarse correctamente.
tuits4 <- tuits_afinn
tuits4$Periodo <- as.factor(tuits4$Periodo)
tuits4 %>%
ggplot() +
aes(Periodo, Puntuacion, fill = Candidato) +
geom_boxplot(width = 1) +
facet_wrap(~Candidato) +
tema_graf +
theme(legend.position = "none")
Por último, podemos analizar las tendencias de sentimientos usando las funciones de densidad de las puntuaciones. ggplot2 tiene la función geom_density() que hace muy fácil crear y graficar estas funciones.
tuits4 %>%
ggplot() +
aes(Puntuacion, color = Candidato) +
geom_density() +
facet_wrap(~Candidato) +
tema_graf
## Warning: Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
Al igual que alguna de las métrica anteriores las variaciones aquí son poco visibles.
Por supuesto, también podemos observar las tendencias a través del tiempo usando facet_grid() para crear una cuadrícula de gráficas, con los candidatos en el eje x y los meses en el eje y.
tuits4 %>%
ggplot() +
aes(Puntuacion, color = Candidato) +
geom_density() +
facet_grid(Candidato~Mes) +
tema_graf
## Warning: Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf
En este artículo revisamos algunas de las estrategias principales para analizar sentimientos con R, usando el léxico Afinn. Este léxico le asigna una puntuación a las palabras, de acuerdo a su contenido, que puede ser positivo o negativo.
En realidad, que la puntuación sea de tipo numérico es lo que nos abre una amplia gama de posibilidades para analizar sentimientos usando el léxico Afinn. Con conjuntos de datos más grandes que el que usamos en este ejemplo, es incluso plausible pensar en análisis más complejos, por ejemplo, establecer correlaciones y crear conglomerados.
Aunque no nos adentramos al análisis de los resultados que obtuvimos con nuestros datos, algunas tendencias se hicieron evidentes rápidamente. Por ejemplo, la mayoría de los candidatos ha tendido a tuitear de manera positiva. Con un poco de conocimiento del tema, sin duda podríamos encontrar información útil e interesante.
library(wordcloud)
## Loading required package: RColorBrewer
wordcloud(tweets$text)
## Warning in tm_map.SimpleCorpus(corpus, tm::removePunctuation): transformation
## drops documents
## Warning in tm_map.SimpleCorpus(corpus, function(x) tm::removeWords(x,
## tm::stopwords())): transformation drops documents
Esto deja un espacio de tres preguntas clave que pueden utilizarse en el discurso de campaña. También puede utilizarse términos que indiquen acciones cocretas sobre las dimensiones Académicas, Investigación, Finanzas, Extensión, Bienestar, Cultura y Deporte.
Las cuentas de twitter vinculadas a la clave de búsqueda Elecciones UNCUYO totalizan 27 mensajes de los cuales 100% son neutrales. No hay sentimientos ni a favor ni en contra. Nunca había visto algo así en alguna elección. Tal vez esto esté señalando un alto grade de indiferencia en el electorado o refleje que no saben a que foros recurrir para encontrar las propuestas.↩︎